<?php

namespace app\api\controller;

use app\admin\model\ykw\OrderForm;
use app\admin\model\ykw\UserInfo;
use app\admin\model\ykw\WxUser;
use think\Cache;
use think\response\Json;

use EasyWeChat\Factory;

/**
 * 业务接口
 */
class Login
{
    public function wlogin($code)
    {
        $app = Factory::miniProgram(config('wechat'));
        $a = $app->auth->session($code);

        if (isset($a['errcode'])) {
            halt($a);
        }

        $a['time'] = time();
        $md5 = md5($a['openid']);


        if (!UserInfo::get(['openid' => $a['openid']])) {
            UserInfo::create(['openid' => $a['openid'], 'create_time' => date('Y-m-d H:i:s', time())]);
        }
        $a['tx'] = UserInfo::get(['openid' => $a['openid']])['image'];
        $a['name'] = UserInfo::get(['openid' => $a['openid']])['nickname'];

        if (Cache::set($md5, json_encode($a), 7200)) {

            return resoultJson(1, '登录成功', ['sessionKey' => $md5, 'tx' => $a['tx'], 'name' => $a['name']]);
        }

        return resoultJson(0, '登录失败');


    }

    //支付回调
    public function zfhd()
    {
        $app = Factory::payment(config('xcx'));

        $response = $app->handlePaidNotify(function ($message, $fail) {

            // 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
            $order = OrderForm::get(['out_trade_no' => $message['out_trade_no']]);

            if (!$order || $order->paid_at) { // 如果订单不存在 或者 订单已经支付过了
                return true; // 告诉微信，我已经处理完了，订单没找到，别再通知我了
            }

            ///////////// <- 建议在这里调用微信的【订单查询】接口查一下该笔订单的情况，确认是已经支付 /////////////

            if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态，不代表支付状态
                // 用户是否支付成功
                if ($message['result_code'] === 'SUCCESS') {
                    $order->paid_at = time(); // 更新支付时间为当前时间
                    $order->status = '已支付';

                    // 用户支付失败
                } elseif ($message['result_code'] === 'FAIL') {
                    $order->status = '支付失败';
                }
            } else {
                return $fail('通信失败，请稍后再通知我');
            }

            $order->save(); // 保存订单

            return true; // 返回处理完成
        });

//        $response->send(); // return $response;

    }
}


